home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2109 / 2109.xpi / chrome / febe.jar / content / febeProfile.js < prev    next >
Text File  |  2009-10-13  |  16KB  |  446 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 6.3
  4.  
  5. var febeProfileService = Cc["@mozilla.org/toolkit/profile-service;1"].getService(Ci.nsIToolkitProfileService);
  6. febeProfileWin = this.window.document;
  7.  
  8. function febeProfileWindowInit(){
  9.     if(!febeInitDir()){return false;}
  10.     febeSetMsgs();
  11.     var prefName = "extensions.febe.restoreToProfilePath";
  12.     febePrefs.setCharPref(prefName,"");  // Full path to backed up profile
  13.     
  14.     var prefName = "extensions.febe.restoreProfileFromBackupName";
  15.     var febePrName = febeMsg[293];
  16.     febePrefs.setCharPref(prefName,febePrName);
  17.  
  18.     var prefName = "extensions.febe.restoreToProfileName";
  19.     var febePrName = febeMsg[295];
  20.     febePrefs.setCharPref(prefName,febePrName);
  21.     
  22.     febeSetRestoreProfileHeader();
  23.     febeBuildProfileList();
  24.     febeProfileCreated = 0;
  25.     febeProfileIndex = -1;
  26.     febeProfileBackupIsSelected = false;
  27.     febeProfileDestinationIsSelected = false;
  28.     febeProfileRestoreSanityCheck();
  29. }//febeProfileWindowInit()
  30.  
  31. function febeSetRestoreProfileHeader(){
  32.     febeProfList = febeGetProfileList();
  33.     febeProfileWin.getElementById("febeCurrentProfileText").value = febeProfName ;
  34.     
  35.     var prefName = "extensions.febe.restoreProfileFromBackupPath";
  36.     var febePathName = febePrefs.getCharPref(prefName);  // Full path to backed up profile
  37.     
  38.     var prefName = "extensions.febe.restoreProfileFromBackupName";
  39.     var febePrName = febePrefs.getCharPref(prefName);
  40.     if(febeIsOnlineBackup){    
  41.         febeProfileWin.getElementById("febeSelectedProfileText").value = febePrName + " "+ febeMsg[304];
  42.     }else{
  43.         febeProfileWin.getElementById("febeSelectedProfileText").value = febePrName;
  44.     }//if
  45.     var prefName = "extensions.febe.restoreToProfileName";
  46.     var febePrRestName = febePrefs.getCharPref(prefName);
  47.     febeProfileWin.getElementById("febeDestinationProfileText").value = febePrRestName;
  48.     return true;
  49. }//febeSetRestoreProfileHeader()
  50.  
  51. function febeBuildProfileList(){    
  52.     // Clear existing items
  53.     var theTree = document.getElementById("febeProfileList");
  54.     var children = theTree.childNodes;
  55.     var n = children.length;
  56.     for (var i = 0; i < n; i++) {
  57.         theTree.removeChild(children[0]);
  58.     }//for
  59.     
  60.     var files = Cc["@mozilla.org/file/directory_service;1"]
  61.         .getService(Ci.nsIProperties)
  62.         .get("DefProfRt", Ci.nsIFile);
  63.     var dfltProfile = files.path;
  64.     
  65.     for(var i = 0; i < febeProfList.length; i++){
  66.         var rootPath = febeProfList[i].rootDir.path;
  67.         var item = febeProfileWin.getElementById("febeProfileList")
  68.             .appendItem (febeProfList[i].name,rootPath)
  69.         if(item.label == febeProfName ){item.disabled = true;}
  70.         item.setAttribute("tooltiptext",febeMsg[286]+" "+rootPath);
  71.         if(rootPath.indexOf(dfltProfile) == 0){
  72.             item.setAttribute("style","color: green;");        // Default directory
  73.         }else{
  74.             item.setAttribute("style","color: purple;");    // Non-default directory
  75.         }//if
  76.     }//for
  77.     febeProfileWin.getElementById("febeProfileList").selectedIndex = -1;    // Clear selected item
  78.     
  79.     if(febeProfList.length == 1){    // If there is only one profile, display help message
  80.         var d = febeProfileWin.getElementById("febeRestoreID").value;
  81.         febeHelp('99',d);
  82.         febeProfileDestinationIsSelected = true;
  83.         febeProfileRestoreSanityCheck();
  84.         return false;
  85.     }//if
  86.     
  87.     if(febeProfileCreated > 0){        // If new profile was created, select it
  88.         febeProfileWin.getElementById("febeProfileList").selectedIndex = febeProfileCreated;
  89.         febeProfileWin.getElementById("febeProfileList").ensureIndexIsVisible(febeProfileCreated);
  90.         febeProfileIndex = febeProfileCreated;
  91.         febeProfileDestinationIsSelected = true;
  92.         febeProfileRestoreSanityCheck();
  93.     }//if
  94.     return true;
  95. }//febeSetRestoreProfileHeader()
  96.  
  97. function febeProfileSelected(){
  98.     febeProfileIndex = febeProfileWin.getElementById("febeProfileList").selectedIndex;
  99.     if(febeProfileIndex == -1){return false;}
  100.     
  101.     var item = febeProfileWin.getElementById("febeProfileList").selectedItem.label;
  102.     if(item == febeProfName ){
  103.         febeAlert(febeMsg[6]);    // Can't be current profile
  104.         return false;
  105.     }//if
  106.     febeProfileWin.getElementById("febeDestinationProfileText").value = item;
  107.     var prefName = "extensions.febe.restoreToProfileName";
  108.     febePrefs.setCharPref(prefName,item);
  109.     febeProfileDestinationIsSelected = true;
  110.     febeProfileRestoreSanityCheck();
  111.     return true;
  112. }//febeProfileSelected()
  113.  
  114. function febeGetProfileList(){
  115.     var profArray = [];
  116.     var profiles = febeProfileService.profiles;
  117.     while (profiles.hasMoreElements()) {
  118.         var profile = profiles.getNext().QueryInterface(Ci.nsIToolkitProfile);
  119.         profArray.push(profile);
  120.     }//while
  121.     return profArray;
  122. }//febeGetProfileList(){
  123.  
  124. function febeCreateProfileInit(){
  125.     document.getElementById("febeProfileButtonBox").setAttribute("hidden","true");
  126.     document.getElementById("febeCreateProfileID").setAttribute("hidden","false");
  127.     document.getElementById("newprofileID").reset();
  128.     document.getElementById("newprofileID").focus();
  129.     document.getElementById("febeProfileList").disabled = true;
  130.     febeProfileCreated = 0;
  131.     febeProfileRestoreSanityCheck();
  132.     return true;
  133. }//febeCreateProfileInit()
  134.  
  135. function febeCancelCreateProfile(){
  136.     document.getElementById("febeProfileButtonBox").setAttribute("hidden","false");
  137.     document.getElementById("febeCreateProfileID").setAttribute("hidden","true");
  138.     document.getElementById("newprofileID").focus();
  139.     document.getElementById("febeProfileList").disabled = false; 
  140.     febeProfileRestoreSanityCheck();
  141.     return true;
  142. }//febeCancelCreateProfile()
  143.  
  144. function febeCreateProfile(){
  145.     var newProfile = document.getElementById("newprofileID").value;
  146.     if(!febeCheckProfileName(newProfile)){return false;}
  147.     var dirService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
  148.     var proot = dirService.get("DefProfRt", Ci.nsIFile);
  149.     var prName = "febeprof." + newProfile;    // Use 'febeprof' as the salt value to easily identify which profiles FEBE creates
  150.     proot.append(prName);
  151.     try{
  152.         febeProfileService.createProfile(proot, null, newProfile);
  153.         febeProfileService.flush();
  154.         var tmp = febeMsg[288].replace("%PROFILE%",newProfile);
  155.         febeAlert(tmp);
  156.         febeCancelCreateProfile();
  157.         febeSetRestoreProfileHeader();
  158.         febeBuildProfileList();
  159.     }catch(e){
  160.         febeFatal(e,febeMsg[289]);
  161.         return false;
  162.     }//try
  163.     return true;
  164. }//febeCreateProfile()
  165.  
  166. function febeCheckProfileName(profileNameToCheck){
  167.   // Check for emtpy profile name.
  168.     if (!/\S/.test(profileNameToCheck)){
  169.         febeAlert(febeMsg[290]);
  170.         return false;
  171.     }//if
  172.  
  173.     // Check whether all characters in the profile name are allowed.
  174.     if (/([\\*:?<>|\/\"])/.test(profileNameToCheck)){
  175.         var tmp = febeMsg[291].replace("%BADCHAR%",[RegExp.$1]);
  176.         febeAlert(tmp);
  177.         return false;
  178.     }//if
  179.  
  180.     // Check whether a profile with the same name already exists.
  181.     if (febeProfileExists(profileNameToCheck)){
  182.         febeAlert(febeMsg[292]);
  183.         return false;
  184.     }//if
  185.     
  186.     // profileNameToCheck is valid.
  187.     return true;
  188. }//febeCheckProfileName()
  189.  
  190. function febeProfileExists(aName){
  191.     var profiles = febeProfileService.profiles;
  192.     while (profiles.hasMoreElements()) {
  193.         var profile = profiles.getNext().QueryInterface(Ci.nsIToolkitProfile);
  194.         if (profile.name.toLowerCase() == aName.toLowerCase()){return true;}
  195.         febeProfileCreated++;
  196.     }//while
  197.     return false;
  198. }//febeProfileExists()
  199.  
  200. function febeGetProfileBackup(which){
  201.     if(!febeInitDir()){return false;}
  202.     if(which == "local"){
  203.         febePathName = "";
  204.         var mask = "profileFx3{*}.fbu";
  205.         if(febePlatform == 3) mask = "*.fbu";    // Bug 444423
  206.         if(!febePickFile(mask,90)){return true};
  207.         var check1 = febePrName.indexOf("profileFx3{");
  208.         var check2 = febePrName.length - febePrName.lastIndexOf("}.fbu");
  209.         if(check1 != 0 || check2 != 5){
  210.             var tmp = "<style>color: purple; font-weight: bold; font-size: 12px;</style>"+febeMsg[103].replace("%FILE%","'"+febePrName+"'")+"\n";
  211.             tmp += "<style>color: red; font-weight: bold; font-size: 14px;</style>"+febeMsg[46];
  212.             febeAlert(tmp);
  213.             return false;
  214.         }//if
  215.         
  216.         var prefName = "extensions.febe.restoreToProfilePath";
  217.         febePrefs.setCharPref(prefName,febePathName);
  218.         
  219.         var prefName = "extensions.febe.restoreProfileFromBackupName";
  220.         febePrefs.setCharPref(prefName,febePrName);
  221.         febeIsOnlineBackup = false;
  222.     }else{
  223.         var date = Application.storage.get("created", "");
  224.         febePathName = Application.storage.get("location", "");
  225.         febePrName = Application.storage.get("boxname", "");
  226.         febeBUdate = new Date(parseInt(date));
  227.         
  228.         var prefName = "extensions.febe.restoreToProfilePath";
  229.         febePrefs.setCharPref(prefName,febePathName);
  230.         
  231.         var prefName = "extensions.febe.restoreProfileFromBackupName";
  232.         febePrefs.setCharPref(prefName,febePrName);
  233.         febeIsOnlineBackup = true;
  234.     }//if
  235.     febeSetRestoreProfileHeader();
  236.     febeProfileBackupIsSelected = true;
  237.     febeProfileRestoreSanityCheck();
  238.     return true;
  239. }//febeGetProfileBackup()
  240.  
  241. function febeStartProfileRestoreCheck(){
  242.     var prefName = "extensions.febe.restoreToProfilePath";
  243.     var restorePath = febePrefs.getCharPref(prefName,febePathName);
  244.     
  245.     if(restorePath == ""){
  246.         febeAlert(febeMsg[294]);    // No backup file selected
  247.         return false;
  248.     }//if
  249.     febeProfileWin.getElementById("febeProfileList").selectedIndex = febeProfileIndex;
  250.     if(febeProfileWin.getElementById("febeProfileList").selectedIndex == -1){
  251.         febeAlert(febeMsg[48]);    // No destination profile selected
  252.         return false;
  253.     }//if
  254.     febeStartProfileRestore(febeProfList[febeProfileIndex]);
  255.     return true;
  256. }//febeStartProfileRestoreCheck()
  257.  
  258. function febeSwitchToProfile(profileName){    
  259.     var newProfile = febeProfileService.getProfileByName(profileName);
  260.     febeProfileService.selectedProfile = newProfile;
  261.     febeProfileService.startWithLastProfile = true;
  262.     febeProfileService.flush();
  263.     return true;
  264. }//febeSwitchToProfile(profileName)
  265.  
  266. function febeStartupOptions(){
  267.     var opt = febeProfileWin.getElementById("febeStartupOptionID").selectedIndex;
  268.     switch(opt){
  269.         case 0:    // Use new/selected profile
  270.             var prefName = "extensions.febe.restoreToProfileName";
  271.             var profileName = febePrefs.getCharPref(prefName);            
  272.             if(profileName == febeMsg[295]){    // No profile selected
  273.                 febeAlert(febeMsg[303]);
  274.                 break;
  275.             }//if
  276.             var newProfile = febeProfileService.getProfileByName(profileName);
  277.             febeProfileService.selectedProfile = newProfile;
  278.             febeProfileService.startWithLastProfile = true;
  279.             febeProfileService.flush();
  280.             febeShutdownRestart(profileName);
  281.             break;
  282.         case 1:    // Use profile manager
  283.             febeProfileService.startWithLastProfile = false;
  284.             febeProfileService.flush();
  285.             febeShutdownRestart("");
  286.             break;
  287.         case 2:    // Do nothing            
  288.             var startupbox = febeProfileWin.getElementById("febeStartupBox");
  289.             startupbox.setAttribute("hidden", "true");
  290.             
  291.             var buttonbox = febeProfileWin.getElementById("febeProfileButtonBox");
  292.             buttonbox.setAttribute("hidden", "false");
  293.  
  294.             this.sizeToContent();
  295.             break;
  296.     }//switch
  297.     febeProfileRestoreSanityCheck();
  298.     return true;
  299. }//febeStartupOptions()
  300.  
  301. function febeShutdownRestart(profileName){
  302.     febeSetMsgs();
  303.     
  304.     if(profileName != ""){
  305.         var tmp = febeMsg[296] = febeMsg[296].replace(/%PROFILE%/,"'"+profileName+"'");    // New porofile
  306.     }else{
  307.         var tmp = febeMsg[297];        // Profile Manager
  308.     }//if
  309.     var app = febeGetEnvironmentVariableValue("MOZ_CRASHREPORTER_RESTART_ARG_0");
  310.     if(app){
  311.         tmp += "\n\n<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[298]+"\n";
  312.     }//if
  313.     var OK = febeConfirm(tmp);
  314.     if(OK && app){
  315.         var Fx = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
  316.         Fx.initWithPath(app);
  317.         var args = [];
  318.         if(profileName != ""){    // Start with profile
  319.             args[0] = "-P";
  320.             args[1] = profileName;
  321.             args[2] = "-no-remote";
  322.         }else{
  323.             args[0] = "-no-remote";
  324.             args[1] = "-P";
  325.         }//if
  326.         var process = Components.classes["@mozilla.org/process/util;1"]
  327.             .getService(Components.interfaces.nsIProcess);
  328.         process.init(Fx);
  329.         process.run(false,args,args.length);
  330.         window.setTimeout(febeQuitFx,1000);    // Give it a second to catch up, then shutdown
  331.     }else{
  332.         var startupbox = febeProfileWin.getElementById("febeStartupBox");
  333.         startupbox.setAttribute("hidden", "true");
  334.         
  335.         var buttonbox = febeProfileWin.getElementById("febeProfileButtonBox");
  336.         buttonbox.setAttribute("hidden", "false");
  337.  
  338.         this.sizeToContent();
  339.     }//if
  340.     febeProfileRestoreSanityCheck();
  341.     return true;
  342. }//febeShutdownRestart()
  343.  
  344. function febeStartupButton(){
  345.     var startupbox = febeProfileWin.getElementById("febeStartupBox");
  346.     startupbox.setAttribute("hidden", "false");
  347.     
  348.     var buttonbox = febeProfileWin.getElementById("febeProfileButtonBox");
  349.     buttonbox.setAttribute("hidden", "true");
  350.  
  351.     this.sizeToContent();
  352.     return true;
  353. }//febeStartupButton()
  354.  
  355. function febeQuitFx(){
  356.     Application.storage.set("shuttingDownAfterProfileRestore", true);
  357.     goQuitApplication();    // Use the shutdown routine in chrome/global/globalOverlay.js
  358. }//febeQuitFx()
  359.  
  360. function febeRestoreProfile(){
  361.     // Open restore profile window
  362.     febeGetPlatform();
  363.     if(febePlatform == 3){    // No modal windows for Mac
  364.         var opts = "chrome,alwaysRaised,centerscreen,resizable,dialog='no'"
  365.     }else{
  366.         var opts = "chrome,alwaysRaised,centerscreen,resizable,dialog='no'"
  367.     }//if
  368.     febeWin = window.open("chrome://febe/content/febeProfile.xul", "FEBE", opts);    
  369.     return true;
  370. }//febeRestoreProfile()
  371.  
  372. function febeStartProfileRestore(profileObj){
  373.     if(!febeInitDir()){return false;}
  374.     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);  
  375.     var febeWin = wm.getMostRecentWindow("febe:restoreProfile");  
  376.     
  377.     var prefName = "extensions.febe.restoreToProfilePath";
  378.     febePathName = febePrefs.getCharPref(prefName);  // Full path to backed up profile
  379.     if(!febeIsOnlineBackup){febeGetBuDate(febePathName);}
  380.     if(febeConfirmRestore(75,febeBUdate)){    
  381.         if(!febeInitDir()){return false;}
  382.         var buttonbox = febeWin.document.getElementById("febeProfileButtonBox");
  383.         buttonbox.setAttribute("hidden", "true");
  384.  
  385.         var progressbox = febeWin.document.getElementById("febeProfileRestoreBox");
  386.         progressbox.setAttribute("hidden", "false");
  387.         
  388.         febex = profileObj;
  389.         setTimeout("febeStartProfileRestore2()",500);    // Let the browser catch up
  390.     }else{
  391.         febeAlert(febeMsg[46]);
  392.     }//if
  393.     return true;
  394. }//febeStartProfileRestore()
  395.  
  396. function febeStartProfileRestore2(){
  397.     // Remove contents of destination profile
  398.     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);  
  399.     var febeWin = wm.getMostRecentWindow("febe:restoreProfile");  
  400.     var destProfile = febex.rootDir.path;
  401.     var pDestDir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
  402.     pDestDir.initWithPath(destProfile);
  403.     var entries = pDestDir.directoryEntries;
  404.     while(entries.hasMoreElements()){
  405.         var entry = entries.getNext();   
  406.         entry.QueryInterface(Ci.nsILocalFile);
  407.         entry.remove(true);
  408.     }//while
  409.     
  410.     var zipFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
  411.     zipFile.initWithPath(febePathName);
  412.     
  413.     var sourceDir = zipFile.parent.path;
  414.     var destDir = destProfile;
  415.     var zipName = zipFile.leafName
  416.     var OK = new Boolean(true);
  417.     OK = febeMainWindow.febeUnzip(sourceDir,destDir,zipName);
  418.     var progressbox = febeWin.document.getElementById("febeProfileRestoreBox");
  419.     progressbox.setAttribute("hidden", "true");
  420.     if(OK){
  421.         febeChmod(destDir);            
  422.         febeAlert(febeMsg[91]);
  423.     }else{
  424.         febeAlert(febeMsg[46]);
  425.     }//if
  426.     var buttonbox = febeWin.document.getElementById("febeProfileButtonBox");
  427.     buttonbox.setAttribute("hidden", "false");
  428.     febeWin.sizeToContent();
  429.     febeProfileRestoreSanityCheck();
  430.     return true;
  431. }//function febeStartProfileRestore2(){
  432.  
  433. function febeProfileRestoreSanityCheck(){
  434.   // Don't enable the ""start restore" button unless everything is ready to go
  435.     var spb = febeProfileWin.getElementById("startProfileRestoreID");
  436.     if(febeProfileBackupIsSelected && febeProfileDestinationIsSelected){
  437.         spb.disabled = false;
  438.     }else{
  439.         spb.disabled = true;
  440.     }//if
  441.     
  442.     var obu = febeProfileWin.getElementById("onlinerestorebuttonID");
  443.     var boxEnabled = febePrefs.getBoolPref("extensions.febe.boxnet.enabled");
  444.     obu.setAttribute("disabled",!boxEnabled);
  445.     return true;
  446. }//febeProfileRestoreSanityCheck()